{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Examples from the paper\n",
    "\n",
    "In this notebook, provide the codes used for illustration in the corresponding paper with all the supplementary code segments excluded from the paper due to space limitations."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Using TensorFlow backend.\n"
     ]
    }
   ],
   "source": [
    "import scipy\n",
    "import sklearn\n",
    "import keras\n",
    "import imblearn\n",
    "\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "import smote_variants as sv\n",
    "import imblearn.datasets as imb_datasets\n",
    "import sklearn.datasets as sk_datasets\n",
    "\n",
    "random_seed= 3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# configuring pandas to print all columns\n",
    "\n",
    "pd.set_option('display.max_colwidth', 1000)\n",
    "pd.set_option('display.max_columns', 10)\n",
    "pd.set_option('max_colwidth', 1000)\n",
    "pd.set_option('expand_frame_repr', False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "numpy 1.15.4\n",
      "imblearn 0.4.3\n",
      "scipy 1.1.0\n",
      "sklearn 0.20.1\n",
      "keras 2.2.4\n",
      "smote_variants 0.2.6\n"
     ]
    }
   ],
   "source": [
    "# printing package versions\n",
    "\n",
    "print('numpy %s' % np.__version__)\n",
    "print('imblearn %s' % imblearn.__version__)\n",
    "print('scipy %s' % scipy.__version__)\n",
    "print('sklearn %s' % sklearn.__version__)\n",
    "print('keras %s' % keras.__version__)\n",
    "print('smote_variants %s' % sv.__version__)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "# defining some plotting functions\n",
    "\n",
    "def plot(X, y, title, min_label, maj_label, filename):\n",
    "    plt.figure(figsize= (4, 3))\n",
    "    plt.scatter(X[:,0][y == min_label], X[:,1][y == min_label], label='minority class', color='red', s=25)\n",
    "    plt.scatter(X[:,0][y == maj_label], X[:,1][y == maj_label], label='majority class', color='black', marker='*', s=25)\n",
    "    plt.xlabel('feature 0')\n",
    "    plt.ylabel('feature 1')\n",
    "    plt.title(title)\n",
    "    plt.legend()\n",
    "    plt.tight_layout()\n",
    "    plt.savefig(filename)\n",
    "    plt.show()\n",
    "    \n",
    "def plot_mc(X, y, title, label_0, label_1, label_2, filename):\n",
    "    plt.figure(figsize= (4, 3))\n",
    "    plt.scatter(X[:,0][y == label_0], X[:,1][y == label_0], label='class 0', color='red', s=25)\n",
    "    plt.scatter(X[:,0][y == label_1], X[:,1][y == label_1], label='class 1', color='black', marker='*', s=25)\n",
    "    plt.scatter(X[:,0][y == label_2], X[:,1][y == label_2], label='class 2', color='blue', marker='^', s=25)\n",
    "    plt.xlabel('feature 0')\n",
    "    plt.ylabel('feature 1')\n",
    "    plt.title(title)\n",
    "    plt.legend()\n",
    "    plt.tight_layout()\n",
    "    plt.savefig(filename)\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "# setting the random seed\n",
    "np.random.seed(random_seed)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "2019-06-15 17:58:57,220:INFO:OUPS: Running sampling via ('OUPS', \"{'proportion': 1.0, 'n_jobs': 1}\")\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 288x216 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 288x216 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# sample code segment #0\n",
    "# oversampling by OUPS and plotting\n",
    "\n",
    "import smote_variants as sv\n",
    "import imblearn.datasets as imb_datasets\n",
    "\n",
    "libras= imb_datasets.fetch_datasets()['libras_move']\n",
    "\n",
    "X, y= sv.OUPS().sample(libras['data'], libras['target'])\n",
    "\n",
    "plot(libras['data'], libras['target'], 'libras_move', 1, -1, 'libras_move.eps')\n",
    "plot(X, y, 'libras_move oversampled by OUPS', 1, -1, 'libras_move_oups.eps')\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "# setting the random seed\n",
    "np.random.seed(random_seed)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "2019-06-15 17:58:57,916:INFO:The problem is binary\n",
      "2019-06-15 17:58:57,926:INFO:Executing fold\n",
      "2019-06-15 17:58:57,927:INFO:OUPS: Running sampling via ('OUPS', \"{'proportion': 1.0, 'n_jobs': 1}\")\n",
      "2019-06-15 17:58:57,957:INFO:Executing fold\n",
      "2019-06-15 17:58:57,958:INFO:OUPS: Running sampling via ('OUPS', \"{'proportion': 1.0, 'n_jobs': 1}\")\n",
      "2019-06-15 17:58:57,987:INFO:Executing fold\n",
      "2019-06-15 17:58:57,988:INFO:OUPS: Running sampling via ('OUPS', \"{'proportion': 1.0, 'n_jobs': 1}\")\n",
      "2019-06-15 17:58:58,018:INFO:Executing fold\n",
      "2019-06-15 17:58:58,019:INFO:OUPS: Running sampling via ('OUPS', \"{'proportion': 1.0, 'n_jobs': 1}\")\n",
      "2019-06-15 17:58:58,049:INFO:Executing fold\n",
      "2019-06-15 17:58:58,049:INFO:OUPS: Running sampling via ('OUPS', \"{'proportion': 1.0, 'n_jobs': 1}\")\n",
      "2019-06-15 17:58:58,078:INFO:Executing fold\n",
      "2019-06-15 17:58:58,079:INFO:OUPS: Running sampling via ('OUPS', \"{'proportion': 1.0, 'n_jobs': 1}\")\n",
      "2019-06-15 17:58:58,107:INFO:Executing fold\n",
      "2019-06-15 17:58:58,108:INFO:OUPS: Running sampling via ('OUPS', \"{'proportion': 1.0, 'n_jobs': 1}\")\n",
      "2019-06-15 17:58:58,138:INFO:Executing fold\n",
      "2019-06-15 17:58:58,138:INFO:OUPS: Running sampling via ('OUPS', \"{'proportion': 1.0, 'n_jobs': 1}\")\n",
      "2019-06-15 17:58:58,169:INFO:Executing fold\n",
      "2019-06-15 17:58:58,170:INFO:OUPS: Running sampling via ('OUPS', \"{'proportion': 1.0, 'n_jobs': 1}\")\n",
      "2019-06-15 17:58:58,199:INFO:Executing fold\n",
      "2019-06-15 17:58:58,200:INFO:OUPS: Running sampling via ('OUPS', \"{'proportion': 1.0, 'n_jobs': 1}\")\n",
      "2019-06-15 17:58:58,228:INFO:Executing fold\n",
      "2019-06-15 17:58:58,229:INFO:OUPS: Running sampling via ('OUPS', \"{'proportion': 1.0, 'n_jobs': 1}\")\n",
      "2019-06-15 17:58:58,258:INFO:Executing fold\n",
      "2019-06-15 17:58:58,259:INFO:OUPS: Running sampling via ('OUPS', \"{'proportion': 1.0, 'n_jobs': 1}\")\n",
      "2019-06-15 17:58:58,288:INFO:Executing fold\n",
      "2019-06-15 17:58:58,289:INFO:OUPS: Running sampling via ('OUPS', \"{'proportion': 1.0, 'n_jobs': 1}\")\n",
      "2019-06-15 17:58:58,320:INFO:Executing fold\n",
      "2019-06-15 17:58:58,321:INFO:OUPS: Running sampling via ('OUPS', \"{'proportion': 1.0, 'n_jobs': 1}\")\n",
      "2019-06-15 17:58:58,349:INFO:Executing fold\n",
      "2019-06-15 17:58:58,349:INFO:OUPS: Running sampling via ('OUPS', \"{'proportion': 1.0, 'n_jobs': 1}\")\n",
      "2019-06-15 17:58:58,379:INFO:Computing the results\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "value    0.97887\n",
      "Name: auc, dtype: object\n"
     ]
    }
   ],
   "source": [
    "# sample code segment #1\n",
    "# evaluating the performance of k neighbors classifier with oversampling\n",
    "\n",
    "from sklearn.neighbors import KNeighborsClassifier\n",
    "\n",
    "results= sv.cross_validate(dataset= libras, sampler= sv.OUPS(), \n",
    "                           classifier= KNeighborsClassifier())\n",
    "\n",
    "print(results.loc['auc'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "2019-06-15 17:58:58,405:INFO:The problem is binary\n",
      "2019-06-15 17:58:58,410:INFO:Executing fold\n",
      "2019-06-15 17:58:58,411:INFO:NoSMOTE: Running sampling via ('NoSMOTE', '{}')\n",
      "2019-06-15 17:58:58,421:INFO:Executing fold\n",
      "2019-06-15 17:58:58,421:INFO:NoSMOTE: Running sampling via ('NoSMOTE', '{}')\n",
      "2019-06-15 17:58:58,430:INFO:Executing fold\n",
      "2019-06-15 17:58:58,430:INFO:NoSMOTE: Running sampling via ('NoSMOTE', '{}')\n",
      "2019-06-15 17:58:58,440:INFO:Executing fold\n",
      "2019-06-15 17:58:58,441:INFO:NoSMOTE: Running sampling via ('NoSMOTE', '{}')\n",
      "2019-06-15 17:58:58,449:INFO:Executing fold\n",
      "2019-06-15 17:58:58,450:INFO:NoSMOTE: Running sampling via ('NoSMOTE', '{}')\n",
      "2019-06-15 17:58:58,460:INFO:Executing fold\n",
      "2019-06-15 17:58:58,461:INFO:NoSMOTE: Running sampling via ('NoSMOTE', '{}')\n",
      "2019-06-15 17:58:58,469:INFO:Executing fold\n",
      "2019-06-15 17:58:58,470:INFO:NoSMOTE: Running sampling via ('NoSMOTE', '{}')\n",
      "2019-06-15 17:58:58,478:INFO:Executing fold\n",
      "2019-06-15 17:58:58,479:INFO:NoSMOTE: Running sampling via ('NoSMOTE', '{}')\n",
      "2019-06-15 17:58:58,488:INFO:Executing fold\n",
      "2019-06-15 17:58:58,488:INFO:NoSMOTE: Running sampling via ('NoSMOTE', '{}')\n",
      "2019-06-15 17:58:58,499:INFO:Executing fold\n",
      "2019-06-15 17:58:58,501:INFO:NoSMOTE: Running sampling via ('NoSMOTE', '{}')\n",
      "2019-06-15 17:58:58,514:INFO:Executing fold\n",
      "2019-06-15 17:58:58,515:INFO:NoSMOTE: Running sampling via ('NoSMOTE', '{}')\n",
      "2019-06-15 17:58:58,526:INFO:Executing fold\n",
      "2019-06-15 17:58:58,527:INFO:NoSMOTE: Running sampling via ('NoSMOTE', '{}')\n",
      "2019-06-15 17:58:58,537:INFO:Executing fold\n",
      "2019-06-15 17:58:58,538:INFO:NoSMOTE: Running sampling via ('NoSMOTE', '{}')\n",
      "2019-06-15 17:58:58,546:INFO:Executing fold\n",
      "2019-06-15 17:58:58,547:INFO:NoSMOTE: Running sampling via ('NoSMOTE', '{}')\n",
      "2019-06-15 17:58:58,555:INFO:Executing fold\n",
      "2019-06-15 17:58:58,556:INFO:NoSMOTE: Running sampling via ('NoSMOTE', '{}')\n",
      "2019-06-15 17:58:58,564:INFO:Computing the results\n"
     ]
    }
   ],
   "source": [
    "# evaluating the performance of k neighbors classifier without oversampling\n",
    "\n",
    "np.random.seed(random_seed)\n",
    "results_wo= sv.cross_validate(dataset= libras, sampler= sv.NoSMOTE(), \n",
    "                               classifier= KNeighborsClassifier())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "value    0.962839\n",
      "Name: auc, dtype: object\n"
     ]
    }
   ],
   "source": [
    "# printing the results\n",
    "\n",
    "print(results_wo.loc['auc'])"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
